﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.IO;
using System.Xml;
/// <summary>
/// Summary description for KorisnickiDioUtility
/// </summary>
public class KorisnickiDioUtility
{
	public string nepostojecaStranica;
	/// <summary>
	/// Utility klasa za vracanje podataka o clanku, prva lista sadrzi stranice clanka
	/// druga lista sadrzi thumbnalove koji pripadaju clanku
	/// </summary>
	public class Clanak
	{
		/// <summary>
		/// sadrzi listu stranica clanka
		/// </summary>
		public List<string> sadrzaj;
		public List<EnciklopedijaDrvecaModel.Thumbnail> thumbnailovi;
		public Clanak()
		{
			sadrzaj=new List<string>();
			thumbnailovi = new List<EnciklopedijaDrvecaModel.Thumbnail>();
			
		}
	}
	EnciklopedijaDrvecaModel.EnciklopedijaDrvecaEntities1 entiteti;
	public KorisnickiDioUtility()
	{
		//
		// TODO: Add constructor logic here
		//
		entiteti = new EnciklopedijaDrvecaModel.EnciklopedijaDrvecaEntities1();
		nepostojecaStranica = "<p style='font-size:1.4em;'>Ne postoji tražena stranica</p>";
	}


	/// <summary>
	/// Vraca listu linkova na 6 najnovijih nedavnih clanaka
	/// </summary>
	/// <returns>Riječnik čiji ključ je href na clanak tipa (Clanak.aspx?id=nekiID),
	/// a vrijednost je naziv samog clanka
	/// </returns>
	public Dictionary<String,String> LinkoviNaNedavneClanke()
	{
		Dictionary<string, string> dict = new Dictionary<string, string>();
		var ls = (from e in entiteti.Clanak
				 orderby e.DatumPisanja descending
				 select e).Take(6);
		foreach (var v in ls)
		{
			string str="Clanak.aspx?id="+v.ClanakID;
			dict[str] = v.NazivClanka;
		}
		return dict;
	}


	/// <summary>
	/// Vraca generirani html kod za clanak iz baze u slucaju da clanak ima i (popunjenu galeriju)
	/// generira se i kod thumbnailova za tu galeriju ako je clanak dugacak dijeli se pomocu separatora
	/// separator je tag hr - horizontal rule u ovom slucaju i dodaje se kod pisanja clanka
	/// na svakoj stranici clanka se nalazi galerija, implementacija listanja i prikaza galerije
	/// thumbnailova je opcionalna
	/// </summary>
	/// <param name="clanakID">id clanka ciji html zelimo</param>
	/// <returns>klasa clanak koja sadrzi listu thumbnailova i listu stranica clanka</returns>
	public Clanak ClanakHtml(int clanakID)
	{
		Clanak clanak;
		var cl = from e in entiteti.Clanak
				 where e.ClanakID==clanakID 
				 select e.TextClanka;
		var thumbs = from c in entiteti.Clanak
					 join th in entiteti.Galerija
					 on c.GalerijaID equals th.GalerijaID
					 join thmb in entiteti.Thumbnail
					 on th.GalerijaID equals thmb.GalerijaID
					 select thmb;
		string str = cl.First();
		List<string> lst = Regex.Split(str, "<hr>").ToList();
		clanak = new Clanak();
		clanak.sadrzaj = lst;
		clanak.thumbnailovi = thumbs.ToList();
		return clanak;
			 
	}

  public  int ClanakID(string nazivClanka)
	{
		var id = from e in entiteti.Clanak
				 where e.NazivClanka == nazivClanka
				 select e.ClanakID ;
		return id.First();
	}


	/// <summary>
	/// Vraca Html clanka za drvo 
	/// </summary>
	/// <param name="drvoID">drvoid drveta ciji clanak zelimo dohvatiti</param>
	/// <returns></returns>
	public EnciklopedijaDrvecaModel.Drvo DrvoClanak(int drvoID)
  {
	  var str = from s in entiteti.Drvo
				where s.DrvoID == drvoID
				select s;
	  return str.First();
  }
	/// <summary>
	/// Vraca clanak za drvo koje je najnovije dodano u bazu
	/// </summary>
	/// <returns></returns>
	public EnciklopedijaDrvecaModel.Drvo  DrvoClanak()
	{
		var str = from s in entiteti.Drvo
				  orderby s.DrvoID descending 
				  select s;
		return str.First();
	}

	/// <summary>
	/// Vraca Html clanka  
	/// </summary>
	/// <param name="drvoID">id clanka ciji text zelimo dohvatiti</param>
	/// <returns></returns>
	public  EnciklopedijaDrvecaModel.Clanak ClanakSadrzaj(int clanakID)
	{
		var str = from s in entiteti.Clanak
				  where s.ClanakID  == clanakID
				  select  s;
		return str.First();
	}
	/// <summary>
	/// Vraca najnovije dodani clanak u bazi
	/// </summary>
	/// <returns></returns>
	public EnciklopedijaDrvecaModel.Clanak  ClanakSadrzaj()
	{
		var str = from s in entiteti.Clanak 
				  orderby s.ClanakID descending
				  select s;
		return str.First();
	}


	/// <summary>
	/// Vraca popis velikih slika za drvo sa proslijedjenim id-em
	/// </summary>
	/// <param name="drvoid"></param>
	/// <returns></returns>
	public List<string>DrvoGalerijaLinkovi(int drvoid)
	{
		var gal_id = DrvoGalerijaID(drvoid);

		var sl = from t in entiteti.Thumbnail
				 where t.GalerijaID == gal_id
				 select t.LinkNaVelikuSliku;
		return (List<string>) sl;
	}


	/// <summary>
	/// Vraca popis velikih slika  za drvo koje je najnovije dodano u bazu
	/// </summary>
	/// <returns></returns>
	public List<string>DrvoGalerijaLinkovi()
	{
		var gal_id = DrvoGalerijaID();

		var sl = from t in entiteti.Thumbnail
				 where t.GalerijaID == gal_id
				 select t.LinkNaVelikuSliku;
		return (List<string>)sl;
	}


	/// <summary>
	/// Generira data xml potreban za rad galerije slika
	/// </summary>
	/// <param name="links"></param>
	public string KreirajGalleryXml(List<string>links)
	{
        string description="";
        
		string str;
	
			str = @"<?xml version='1.0' encoding='utf-8' ?>
						<data startalbumindex='0'  transition='WipeRightTransition'>
						<album>";
        int i=0;
			foreach (string s in links)
			{
                i++;
               //uzima naziv drveta za odgovarajuci link na sliku i salje ga kao opis u galeriju

                var d = from drv in entiteti.Drvo
                        join gal in entiteti.Galerija
                        on drv.GalerijaID equals gal.GalerijaID
                        join thumb in entiteti.Thumbnail
                        on gal.GalerijaID equals thumb.GalerijaID
                        where thumb.LinkNaVelikuSliku == s
                        select drv.HrvatskiNaziv;
                if (d.Count() > 0)
                {
                
                    description = d.First().ToString()+" "+ i.ToString();
                }
               
               
				str += @"<slide image='" + s + "' description='"+description+"' />";
			}
			str += @" </album></data>";
			return str;
	   
	}

	/// <summary>
	/// vraca id galerije za drvo sa proslijedjenim id-em
	/// </summary>
	/// <param name="drvoid"></param>
	/// <returns></returns>
	public int DrvoGalerijaID(int drvoid)
	{
		var gal_id = from d in entiteti.Drvo
					 where d.DrvoID == drvoid
					 select d.GalerijaID;
		return (int)gal_id.First();
	}


	/// <summary>
	/// vraca id galerije za posljednje dodano drvo u bazu
	/// </summary>
	/// <returns></returns>
	public int DrvoGalerijaID()
	{
		var gal_id = from d in entiteti.Drvo
					 orderby d.DrvoID descending
					 select d.GalerijaID;
		return (int) gal_id.First();
	}


	/// <summary>
	/// Vraca popis linkova na velike slike za odgovarajucu galeriju
	/// </summary>
	/// <param name="galerijaid"></param>
	/// <returns></returns>
	public List<string>LinkoviNaVelikeSlike(int galerijaid)
	{
		var list=from t in entiteti.Thumbnail 
				 where t.GalerijaID==galerijaid
				 select t.LinkNaVelikuSliku;
		return list.Where(x=>x!=null).ToList() ;
	}

   public string NazivDrvetaPoGaleriji(int galerijaID)
   {
		var naz = from d in entiteti.Drvo
				  join g in entiteti.Galerija
				  on d.GalerijaID equals g.GalerijaID
				  where d.GalerijaID == galerijaID
				  select d.HrvatskiNaziv;
		return naz.First().ToString();
											
   }

   public List<EnciklopedijaDrvecaModel.Rasadnik> PopisRasadnika()
   {
	   var ras = from r in entiteti.Rasadnik
				 select r;
	   return ras.ToList();
   }

	public List<EnciklopedijaDrvecaModel.Clanak> AktualniClanci()
   {
	   var cl = from c in entiteti.Clanak
				where c.poglavlje.NazivPoglavlja=="aktualno"
				orderby c.DatumPisanja descending
				select c;
	   return cl.ToList();
   }


	public string NazivDrvetaPoID(int id)
	{
		var d = from dr in entiteti.Drvo
				where
					dr.DrvoID == id
				select dr.HrvatskiNaziv;
		return d.First().ToString();
	}

	public string NazivClankaPoID(int id)
	{
		var c = from cl in entiteti.Clanak 
				where
					cl.ClanakID  == id
				select cl.NazivClanka ;
		return c.First().ToString();
	}


    /// <summary>
    /// Za odgovarajuci id clanka vraca skraceni tekst iz clanka
    /// </summary>
    /// <param name="clanakID"></param>
    /// <returns></returns>
    public string SkraceniClanak(int clanakID)
    {
        var cl = from clanak in entiteti.Clanak
                 where clanak.ClanakID == clanakID
                 select clanak.TextClanka;
        string str= cl.First().ToString();
        string[] strPolje = str.Split(new string[] { "<br id='delimiter' />","<br id=\"delimiter\" />"}, StringSplitOptions.None);
        return strPolje[0];
    }


    /// <summary>
    /// Vraca skraceni clanak o drvetu
    /// </summary>
    /// <param name="drvoID"></param>
    /// <returns></returns>
    public string SkraceniClanakDrvo(int drvoID)
    {
        var dr = from drvo in entiteti.Drvo
                 where drvo.DrvoID  == drvoID
                 select drvo.Clanak;
        string str= dr.First().ToString();
        string[] strPolje = str.Split(new string[] { "<br id='delimiter' />","<br id=\"delimiter\" />" }, StringSplitOptions.None);
        return strPolje[0];
    }

    /// <summary>
    /// Vraca popis svih podataka o drvecu za odgovarajucu kategoriju
    /// </summary>
    /// <param name="nazivKategorije"></param>
    /// <returns></returns>
    public List<EnciklopedijaDrvecaModel.Drvo> DrvoPoKategoriji(string nazivKategorije)
    {
        var dr = from d in entiteti.Drvo
                 join t in entiteti.TipDrveta
                 on d.TipDrvetaID equals t.TipDrvetaID
                 where t.Naziv == nazivKategorije
                 select d;
        return dr.ToList();
    }
    /// <summary>
    /// Vraca popis svih podataka za sve drvece u bazi
    /// </summary>
    /// <returns></returns>
    public List<EnciklopedijaDrvecaModel.Drvo> DrvoPoKategoriji()
    {
        var dr = from d in entiteti.Drvo
                 join t in entiteti.TipDrveta
                 on d.TipDrvetaID equals t.TipDrvetaID
                 select d;
        return dr.ToList();
    }

    public string DrvoPrviThumbnail(int drvoid)
    {
        int galid=DrvoGalerijaID(drvoid);
        var str = from t in entiteti.Thumbnail
                  where t.GalerijaID == galid
                  select t.Link;
        return str.First();
    }
}